package 滑动窗口;

public class No1004最大连续1的个数III {

    /**
     * 给定一个由若干 0 和 1 组成的数组 A，我们最多可以将 K 个值从 0 变成 1 。
     * 返回仅包含 1 的最长（连续）子数组的长度。
     *
     * 示例 1：
     * 输入：A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
     * 输出：6
     * 解释：
     * [1,1,1,0,0,1,1,1,1,1,1]
     * 粗体数字从 0 翻转到 1，最长的子数组长度为 6。
     * 示例 2：
     * 输入：A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
     * 输出：10
     * 解释：
     * [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
     * 粗体数字从 0 翻转到 1，最长的子数组长度为 10。
     */

    public int longestOnes(int[] A, int K) {

        int left=0;
        int right=0;

        //关键在于: 左走看K<0
        while (right<A.length){
            if(A[right]==0){
                K--;
            }
            if(K<0){
                if(A[left]==0) {
                    K++;
                }
                left++;
            }
            right++;
        }

        return right-left;
    }

    public static void main(String[] args) {
        No1004最大连续1的个数III n=new No1004最大连续1的个数III();
        int[] arr={0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1};
        int result = n.longestOnes(arr, 3);
        System.out.println(result);
    }

}
